const http = require("http");
const fs = require("fs");
const url = require('url')
const ws = require("socket.io");

// 当前在线人数
let count = 0;

// 总访客人数
let totalCount = 0;

// 创建一个web服务器
const server = http.createServer(function (request, response) {
	var parseObj = url.parse(request.url, true)
	pathname = parseObj.pathname
	console.log(pathname)

	if (pathname.indexOf('/public/') === 0) {
		// /public/css/main.css
		// /public/js/main.js
		// /public/lib/jquery.js
		// 统一处理：
		//    如果请求路径是以 /public/ 开头的，则我认为你要获取 public 中的某个资源
		//    所以我们就直接可以把请求路径当作文件路径来直接进行读取
		fs.readFile('.' + pathname, function (err, data) {
			if (err) {
				return response.end('404 Not Found.')
			}
			response.end(data)
		})
	}
	// 读取文件
	if (pathname === "/") {
		fs.readFile("./views/chatRoom.html", function (err, data) {
			if (err) {
				return response.end('404 Not Found.')
			}
			response.end(data)
		})
	}
});

// 基于当前web服务器开启socket实例
const io = ws(server);

// 检测连接事件
io.on("connection", function (socket) {

	console.log("当前有用户连接");
	count++;
	totalCount++;
	console.log("count:" + count);

	let name = '';

	// 加入群聊
	socket.on("join", function (message) {
		console.log(message);
		name = message.name;
		console.log(name + "加入了群聊");

		// 给公众发消息
		socket.broadcast.emit("joinNoticeOther", {
			name: name,
			action: "加入了群聊",
			count: count
		});

		// 给自己发消息
		socket.emit("joinNoticeSelf", {
			count: count,
			id: totalCount
		});
	});

	// 接收客户端所发送的信息
	socket.on("message", function (message) {
		console.log(message);
		// 向所有客户端广播发布的消息
		io.emit("message", message);
	});

	//	 监听到连接断开
	socket.on("disconnect", function () {
		count--;
		console.log(name + "离开了群聊")
		io.emit("disconnection", {
			count: count,
			name: name
		});
	});

});

// 服务器监听端口
server.listen(3000, function (err) {
	if (err) throw err
	console.log("running in 3000")
})